home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 216_01 / calc87.c < prev    next >
Text File  |  1980-01-01  |  3KB  |  98 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3. double mem[10];
  4. main()
  5. {
  6.     double a,b,c;
  7.     double getnum(),acos(),asin(),atan(),cos(),sqrt(),tan(),pow();
  8.     char r,getreply();
  9.     int i;
  10.     
  11.     for(;;){
  12.         a=0;
  13.         b=0;
  14.         c=0;
  15.         a=getnum();
  16.         for(;;){
  17.             printf(
  18. "\nEnter your choice:
  19. + - * / s(Q)uare sq(R)oot (S)in (C)os (T)an arc(s)in arc(c)os arc(t)an
  20. raise-to-the-(P)ower-of (I)nverse-reciprocal (0)-(9) store in memory 1-9
  21. (N)ew (D)isplay-memories (E)rase-memories e(X)it    ");
  22.             r=getreply();
  23.             if (r=='X') exit();
  24.             if (r=='N') break;
  25.             if (r=='E') {
  26.                 for (i=0;i<10;i++) mem[i]=0;
  27.                 continue;
  28.             }
  29.             if (r=='D') {
  30.                 displaymem();
  31.                 printf("\n%1.16g\n",a);
  32.                 continue;
  33.             }
  34.             if ((r>47)&&(r<58)){
  35.                 r-=48;
  36.                 mem[r]=a;
  37.                 printf("\nMemory %d set to %1.16g\n",r,a);
  38.                 continue;
  39.             }
  40.             if (r=='Q') b=a;
  41.             if (r=='*') b=getnum();
  42.             if ((r=='Q')||(r=='*')) printf("\n  %1.16g\nx %1.16g\n= %1.16g\n",a,b,c=a*b);
  43.             if (r=='/') printf("\n  %1.16g\n/ %1.16g\n= %1.16g\n",a,b=getnum(),c=a/b);
  44.             if (r=='+') printf("\n  %1.16g\n+ %1.16g\n= %1.16g\n",a,b=getnum(),c=a+b);
  45.             if (r=='-') printf("\n  %1.16g\n- %1.16g\n= %1.16g\n",a,b=getnum(),c=a-b);
  46.             if (r=='S') printf("\nSin %1.16g\n  = %1.16g\n",a,c=sin(a));
  47.             if (r=='s') printf("\nArcsin %1.16g\n     = %1.16g\n",a,c=asin(a));
  48.             if (r=='C') printf("\nCos %1.16g\n  = %1.16g\n",a,c=cos(a));
  49.             if (r=='c') printf("\nArccos %1.16g\n     = %1.16g\n",a,c=acos(a));
  50.             if (r=='T') printf("\nTan %1.16g\n  = %1.16g\n",a,c=tan(a));
  51.             if (r=='t') printf("\nArctan %1.16g\n     = %1.16g\n",a,c=atan(a));
  52.             if (r=='R') printf("\nSq Root of %1.16g\n         = %1.16g\n",a,c=sqrt(a));
  53.             if (r=='P') printf("\n  %1.16g  to the\n  %1.16g  power\n= %1.16g\n",a,b=getnum(),c=pow(a,b));
  54.             if (r=='I') printf("\nReciprocal of %1.16g\n            = %1.16g\n",a,c=1.0/a); 
  55.             a=c;
  56.         }
  57.     }
  58. }
  59. double getnum()
  60. {
  61.     char s[55],*p,*strchr(),*fgets(),c,getch();
  62.     double n,atof();
  63.     printf("\nEnter a number. Or (M)(n) for memory number 0-9. ");
  64.     fgets(s,51,stdin);
  65.     p=strchr(s,10);
  66.     if (p) *p=0;
  67.     else {
  68.         printf("\n*** WARNING *** --> Entry too long. It has been truncated!\n");
  69.         do c=getch(); 
  70.         while (c!='\n');
  71.     }
  72.     if ((s[0]=='m')||(s[0]=='M'))
  73.         return(n=mem[s[1]-48]);
  74.     return(n=atof(s));
  75. }
  76. displaymem()
  77. {
  78.     int i;
  79.     for (i=0;i<10;i++)
  80.         printf("\nmemory %d = %1.16g",i,mem[i]);
  81.     printf("\n");
  82. }
  83. char replies[29] = "*+-/PIQRSCTNDEXsct0123456789";
  84. getreply()
  85. {
  86.     int i;
  87.     char r;
  88.     for (;;){
  89.         r=getch();
  90.         putchar(r);
  91.         for(i=0;i<28;i++)
  92.             if (r==replies[i]){
  93.                 printf("\n");
  94.                 return(r);
  95.             }
  96.     }
  97. }
  98.